package com.ash.ptp.consumer;

import java.util.concurrent.TimeUnit;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

/**
 * 消息的消费者（接受者）异步等待消息
 * 
 * @author Ashin
 *
 */
public class JMSConsumerAsyn {

    /**
     * 默认连接用户名
     */
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    /**
     * 默认连接密码
     */
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    /**
     * 默认连接地址
     */
    private static final String BROKE_URL = ActiveMQConnection.DEFAULT_BROKER_URL;

    public static void main(String[] args) throws Exception {
        // 实例化连接工厂
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(JMSConsumerAsyn.USERNAME,
                JMSConsumerAsyn.PASSWORD, JMSConsumerAsyn.BROKE_URL);

        // 通过连接工厂获取连接
        Connection connection = connectionFactory.createConnection();
        // 启动连接
        connection.start();
        // 创建session
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 创建一个连接HelloWorld的消息队列
        Destination destination = session.createQueue("HelloQueue");

        // 创建消息消费者
        MessageConsumer messageConsumer = session.createConsumer(destination);

        messageConsumer.setMessageListener(new MessageListener() {

            @Override
            public void onMessage(Message message) {
                try {
                    TimeUnit.SECONDS.sleep(2L);
                    TextMessage textMessage = (TextMessage) message;
                    // 取消息的内容
                    String text = textMessage.getText();
                    // 第八步：打印消息。
                    System.out.println("异步收到消息:" + text);

                } catch (JMSException e) {
                    e.printStackTrace();

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        // 等待键盘输入
        System.in.read();
        // 第九步：关闭资源
        messageConsumer.close();
        session.close();
        connection.close();
    }
}